package com.ht.api.bigtask.impl.qywx;

import com.ht.api.bigtask.BaseBigTask;
import com.ht.api.callback.CallbackFunction;
import com.ht.api.callback.impl.WwxMsgauditNotifyCallbackFunction;
import com.ht.api.constant.CacheConstants;
import com.ht.api.db.Entity;
import com.ht.api.db.util.RedisUtil;

import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;

/**
 * 拉取会话存档消息记录
 * @author asq
 * @createTime 2025年3月27日 11:12:03
 */
@Slf4j
public class GetPermitMessageList extends BaseBigTask {

	@Override
	protected void doExecute(String appId, JSONObject context, Entity bean) {
		// 1. 删除redis中的会话存档消息的分页游戏
		long tenantId = getTenantId(appId);
		String key = getKey(tenantId, appId);
		RedisUtil.delete(key);
		
		// 2. 主动调用会话回调事件，即可拉取消息进行存档
		CallbackFunction fun = new WwxMsgauditNotifyCallbackFunction();
		fun.execute(appId, null, null);
	}
	
	/**
	 * 获取租户的缓存中的存档消息序号的key
	 * @param tenantId 租户ID
	 * @param appid 应用ID
	 * @return
	 */
	private String getKey(long tenantId, String appid) {
		return String.format("%s:%s:seq", tenantId, appid);
	}

	/**
	 * 返回应用对应的租户ID
	 * @param appId 应用ID
	 * @return
	 */
	private long getTenantId(String appId) {
		Entity entity = RedisUtil.get(CacheConstants.KEY_APP + appId);
		return entity.getLong("tenant_id");
	}
}
